package main
import (
	"fmt"
	"io"
	"strings"
)
/*
io包指定了io.Reader接口，表示从数据流末尾进行读取
Go标准库中包含了许多对于该接口的实现，包括文件、网络连接、压缩和加密等
io.Reader接口中有一个Read方法：
func (T) Read(b []byte) (n int, err error)
Read用数据填充给定了的字节切片并返回填充的字节书和错误值。在遇到数据流的结尾时，会返回一个io.EOF错误
*/
func main() {
	r := strings.NewReader("Hello, Reader!")
	b := make([]byte, 8)
	for {
		n, err := r.Read(b)
		fmt.Printf("n = %v err = %v b = %v\n", n, err, b)
		fmt.Printf("b[:n] = %q\n", b[:n])
		if err == io.EOF {
			break
		}
		//n = 8 err = <nil> b = [72 101 108 108 111 44 32 82]
		//b[:n] = "Hello, R"

		//n = 6 err = <nil> b = [101 97 100 101 114 33 32 82]
		//b[:n] = "eader!"

		//n = 0 err = EOF b = [101 97 100 101 114 33 32 82]
		//b[:n] = ""	
	}
}